package com.ddshuai.easy;

/**
 * 描述 新通教育
 * 给定一个正整数，检查他是否为交替位二进制数：换句话说，就是他的二进制数相邻的两个位数永不相等。
 * <p>
 * 输入: 5
 * 输出: True
 * 解释:
 * 5的二进制数是: 101
 * <p>
 * 输入: 7
 * 输出: False
 * 解释:
 * 7的二进制数是: 111
 * <p>
 * 输入: 11
 * 输出: False
 * 解释:
 * 11的二进制数是: 1011
 * <p>
 * 输入: 10
 * 输出: True
 * 解释:
 * 10的二进制数是: 1010
 *
 * @author ddshuai
 * @date 2018-12-14 15:23
 **/
public class HasAlternatingBits {
    public boolean hasAlternatingBits(int n) {
        return !Integer.toBinaryString(n).contains("00") && !Integer.toBinaryString(n).contains("11");
    }

    public boolean hasAlternatingBits1(int n) {
        int num = n;
        int pre = -1;
        boolean has = true;
        while (num > 0) {
            if (pre == num % 2) {
                has = false;
                break;
            }
            pre = num % 2;
            num = num / 2;
        }
        return has;
    }

    public boolean hasAlternatingBits2(int n) {
        while (n > 0) {
            if (n % 2 == (n / 2) % 2) {
                return false;
            }
            n = n / 2;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(new HasAlternatingBits().hasAlternatingBits1(5));
    }
}
